import os

# 文件服务类

class FileService():

    # 声明类属性（静态变量）
    app_root = os.path.dirname(os.path.abspath(__file__))  # 应用根目录
    cwd = os.getcwd()  # 当前工作目录
    basename = os.path.basename(cwd)    # 当前工作目录文件名称
    
    # 将文件路径转换为 Python 模块路径
    @staticmethod
    def path_to_module(filepath, rootdir):
        # 标准化路径分隔符（兼容不同系统）
        normalized_path = os.path.normpath(filepath)
        
        # 分割路径组成部分
        parts = normalized_path.split(os.sep)
        
        # 定位项目根目录
        try:
            root_index = parts.index(rootdir)
        except ValueError:
            raise ValueError(f"此路径中未找到项目根目录 '{rootdir}'")
        
        # 提取模块路径部分（根目录之后的内容）
        module_parts = parts[root_index+1:-1]       # 目录部分
        filename = os.path.splitext(parts[-1])[0]   # 去除 .py 扩展名
        
        # 组合成点分格式
        return ".".join(module_parts + [filename])


    """ 递归查找目录及其子目录中的所有 .py 文件 """    
    def find_py_files(self, directory):
        py_files = []
        
        # 遍历目录内容
        for entry in os.listdir(directory):
            full_path = os.path.join(directory, entry)

            # 排除特定目录（如 __init__.py 、__pycache__）
            if entry.startswith("__") or entry.endswith("__"):
                continue
            
            # 如果是 .py 文件，直接记录路径
            elif os.path.isfile(full_path) and full_path.endswith(".py"):
                py_files.append(full_path)
                
            # 如果是子目录，递归查找
            elif os.path.isdir(full_path):
                py_files += self.find_py_files(full_path)  # 递归调用
        
        return py_files

